/***************************************************
> Copyright (C) 2024 ==KINGYI== All rights reserved.
> File Name: 1.c
> Author:cjy
> Mail:
> Created Time: 2024年08月03日 星期六 16时07分16秒
***************************************************/
/*
* 用父子进程分别统计一个文本文件中字符：
* 父进程统计其中数字字符个数
* 子进程统计字母字符个数:wq
*/
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <time.h>
#include <fcntl.h>
#include <string.h>
#include <sys/wait.h>
#include <ctype.h>
int main(int argc,const char* argv[])
{
    pid_t pid = 0;
    int fp = 0;
    char name[100] = {0};
    printf("请输入你想读取文件的位置与名字:");
    scanf("%s",name);
    // 打开文件
    fp = open(name,O_RDONLY);
    if(fp == -1) {
        perror("open");
        exit(-1);
    }
    // 进入子进程
    pid = fork();
    if(pid == 0) {
        printf("这是子进程:%d\n",getpid());
        fp = open(name,O_RDONLY);
    if(fp == -1) {
        perror("open");
        exit(-1);
    }
        // 读取文件
        int ret = 0;
        int buf[10] = {0};
	int count = 0;
        ret = read(fp,buf,1);
        while (ret > 0) {
		if (isdigit(buf[0])) {
			//printf("%c", buf[0]);
			count ++;
			}
	memset(buf, 0, sizeof(buf));
	ret = read(fp,buf,1);
        }
	printf("数字有:%d个\n",count);
        close(fp);
    }
    else if(pid < 0)
    {
        printf("fork error\n");
    }

    printf("这是父进程:%d\n",getpid());
        // 读取文件
        int ret = 0;
        int buf[10] = {0};
	int count = 0;
        ret = read(fp,buf,1);
        while (ret > 0) {
		if (isalpha(buf[0])) {
			printf("%c", buf[0]);
			count ++;
			}
	memset(buf, 0, sizeof(buf));
	ret = read(fp,buf,1);
        }
	printf("字母有:%d个\n",count);
        close(fp);
    wait(NULL);
    return 0;
}
